package zuochengyun.chapter8;

//未排序正整数中累加和为给定值的最长子数组长度		P354
//参见UnSortedArraySum
public class UnSortedPositiveArraySum {
	
	//该数组中的数全部为正数
	public int getMaxLength(int[] arr, int k){
		if(arr == null || arr.length <= 0 || k <= 0){
			return 0;
		}
		//使用两个指针
		int left = 0;	//left当和大于等于k的时候才移动
		int right = 0;	//right当和小于k的时候才移动
		int sum = arr[0];
		int len = 0;
		while(right < arr.length){
			if(sum == k){
				len = Math.max(len, right - left + 1);
				sum -= arr[left++];
			}else if(sum < k){
				right++;
				if(right == arr.length){
					break;
				}
				sum += arr[right];
			}else{
				sum -= arr[left++];
			}
		}
		return len;
	}

}
